011774251aebfdf93a7c09c85366d1af7b970dcb,src/main/java/com/github/davidmoten/rx2/internal/flowable/FlowableCollectWhile.java,CollectWhileSubscriber,drain,#,148
Before Change
R c = collectionToEmit;
if (c != null) {
collectionToEmit = null;
child.onNext(c);
emitted = true;
}
}
After Change
while (true) {
long r = requested.get();
long e = 0;
while (e != r) {
if (cancelled) {
// TODO GC Nepotism?
queue.clear();
collection = null;
return;
}
R c = queue.poll();
if (c == null) {
if (done) {
if (error != null) {
Throwable err = error;
error = null;
child.onError(err);
return;
} else {
R col = collection;
if (col != null) {
collection = null;
// ensure that the remainder is emitted
queue.offer(col);
// loop around again
} else {
child.onComplete();
return;
}
}
} else {
// nothing to emit and not done
break;
}
} else {
child.onNext(c);
e++;
}
}